;; init.el -*- lexical-binding: t; -*-

(menu-bar-mode -1) ;; Oculta la barra del menú
(scroll-bar-mode -1) ;; Oculta la barra de desplazamiento
(tool-bar-mode -1) ;; Oculta la barra de herramientas
(delete-selection-mode 1) ;; Borra la región seleccionada
(column-number-mode) ;; Número de la columna en la línea de modo
(global-visual-line-mode 1)
(global-auto-revert-mode 1)
(set-fringe-mode 0)
(fset 'yes-or-no-p 'y-or-n-p)

(set-face-font 'default "JetBrainsMono 12")
(set-face-font 'variable-pitch "JetBrainsMono 12")

(setq-default cursor-in-non-selected-windows nil
              frame-title-format '("%f [%m]"))
(setq default-fill-column 100
      make-backup-files nil
      inhibit-startup-message t
      custom-file "~/.emacs.d/custom.el"
      global-auto-revert-non-file-buffers t
      message-kill-buffer-on-exit t
      large-file-warning-threshold nil)
(load custom-file)

(require 'package)
(setq package-archives '(("melpa" . "https://melpa.org/packages/")
                         ("nongnu" . "https://elpa.nongnu.org/nongnu/")
                         ("elpa" . "https://elpa.gnu.org/packages/")))
(package-initialize)
(unless package-archive-contents
  (package-refresh-contents))

(unless (package-installed-p 'use-package)
  (package-install 'use-package))
(require 'use-package)
(setq use-package-always-ensure t)

(use-package vertico
  :ensure t
  :init
  (vertico-mode))

(use-package vertico-directory
  :after vertico
  :ensure nil
  :bind (:map vertico-map
              ("RET" . vertico-directory-enter)
              ("DEL" . vertico-directory-delete-char)
              ("M-DEL" . vertico-directory-delete-word))
  :hook (rfn-eshadow-update-overlay . vertico-directory-tidy))

(use-package savehist
  :init
  (savehist-mode))

(use-package marginalia
  :after vertico
  :ensure t
  :init
  (marginalia-mode)
  :custom
  (marginalia-align 'right))

(use-package orderless
  :ensure t
  :after vertico
  :custom
  (completion-styles '(orderless basic)))

(use-package embark
  :ensure t
  :bind (("C-." . embark-act)
         ("C-;" . embark-dwim)
         ("C-h B" . embark-bindings))
  :init
  (setq prefix-help-command #'embark-prefix-help-command)
  :config
  (add-to-list 'display-buffer-alist
               '("\\`\\*Embark Collect \\(Live\\|Completions\\)\\*"
                 nil
                 (window-parameters (mode-line-format . none)))))

(use-package corfu
  :custom
  (corfu-auto t)
  (corfu-quit-no-match t)
  (corfu-separator ?\s)
  :init
  (global-corfu-mode))

(use-package corfu-terminal
  :config
  (unless (display-graphic-p)
    (corfu-terminal-mode +1)))

(use-package which-key
  :defer 0
  :config
  (which-key-mode)
  (setq which-key-idle-delay 0.3))

(use-package magit
  :bind ("C-x g" . magit-status))

(use-package modus-themes
  :if window-system
  :init
  (load-theme 'modus-vivendi t))

(use-package smartparens
  :hook (prog-mode . smartparens-mode))

(use-package dired
  :ensure nil
  :defer 1
  :config
  (setq dired-recursive-copies 'always
        dired-listing-switches "--group-directories-first -alh"))

(use-package dired-hide-dotfiles
  :after dired
  :hook (dired-mode . dired-hide-dotfiles-mode)
  :config
  (define-key dired-mode-map "." #'dired-hide-dotfiles-mode))

(use-package pdf-tools
  :defer t)

(pdf-loader-install)

(use-package pdf-view-restore
  :after pdf-tools
  :config
  (add-hook 'pdf-view-mode-hook 'pdf-view-restore-mode))

(use-package elfeed
  :no-require t
  :bind ("C-x w" . elfeed))

(use-package elfeed-org
  :ensure t
  :after elfeed 
  :config
  (elfeed-org)
  (setq rmh-elfeed-org-files (list "~/.emacs.d/elfeed.org")))

(use-package latex
  :ensure auctex
  :defer t
  :custom
  (TeX-source-correlate-mode t)
  (TeX-source-correlate-start-server t)
  :config
  (setq TeX-view-program-selection '((output-pdf "PDF Tools")))
  (add-hook 'TeX-after-compilation-finished-functions #'TeX-revert-document-buffer))

(use-package markdown-mode
  :ensure t
  :commands (markdown-mode gfm-mode)
  :mode (("README\\.md\\'" . gfm-mode)
         ("\\.md\\'" . markdown-mode)
         ("\\.markdown\\'" . markdown-mode)))

(use-package org
  :commands (org-capture org-agenda)
  :bind (("C-c l" . org-store-link)
         ("C-c a" . org-agenda)
         ("C-c c" . org-capture))
  :custom
  (org-export-backends
   '(beamer html icalendar latex md odt))
  (org-capture-templates
   '(("h" "Por hacer" entry
      (file+headline "agenda.org" "Cosas por hacer")
      "** TODO %?")
     ("r" "Reunión" entry
      (file+headline "agenda.org" "Cosas por hacer")
      "** REUNIÓN %^{¿De qué?|JGM|HSS|BANDA|DOJO|VECINOS}\n %^T")
     ("e" "Evento")
     ("ec" "Cumpleaños" entry
      (file+headline "agenda.org" "Eventos")
      "** CUMPLE %^{¿De quién?}\n SCHEDULED %^T")
     ("ef" "Funeral" entry
      (file+headline "agenda.org" "Eventos")
      "** FUNERAL %^{¿De quién?}\n SCHEDULED %^T")
     ("em" "Matrimonio" entry
      (file+headline "agenda.org" "Eventos")
      "** MATRI %^{¿De quién?}\n SCHEDULED %^T")))
  :config
  (setq org-agenda-files '("~/org/agenda.org")
        org-ellipsis " ▾"
        org-footnote-auto-adjust t
        org-return-follows-link t
        org-log-done 'time
        org-capture-bookmark nil
        org-html-validation-link nil
        org-startup-indented t
        org-startup-folded nil))

(with-eval-after-load 'org
    (org-babel-do-load-languages
     'org-babel-load-languages
     '((C . t)
       (scheme . t)
       (python . t)
       (shell . t)))
    (add-hook 'org-babel-after-execute-hook 'org-redisplay-inline-images))

(use-package citar
    :defer t
    :bind (("C-c b" . citar-insert-citation)
           ("M-p" . citar-org-update-prefix-suffix)
           :map minibuffer-local-map
           ("M-b" . citar-insert-preset))
    :custom
    (citar-bibliography '("./referencias.bib"))
    :hook
    (LaTeX-mode . citar-capf-setup)
    (org-mode . citar-capf-setup))

(use-package org-bullets
  :no-require t
  :custom
  (org-bullets-bullet-list '("◉" "●" "○" "●" "○" "●")))

(use-package hide-lines)

(use-package hide-mode-line
  :defer t)

(defun terror/slide-setup ()
  (global-hl-line-mode -1)
  (setq org-hide-emphasis-markers t)
  (org-bullets-mode 1)
  (setq text-scale-mode-amount 3)
  (text-scale-mode 1)
  (set-frame-parameter (selected-frame)
                       'internal-border-width 75)
  (org-display-inline-images)
  (toggle-frame-fullscreen)
  (hide-mode-line-mode 1)
  (hide-lines-matching "#\\+begin")
  (hide-lines-matching "#\\+end"))

(defun terror/slide-end ()
  (global-hl-line-mode 1)
  (setq org-hide-emphasis-markers nil)
  (org-bullets-mode -1)
  (setq text-scale-mode-amount 0)
  (text-scale-mode -1)
  (set-frame-parameter (selected-frame)
                       'internal-border-width 20)
  (toggle-frame-fullscreen)
  (hide-mode-line-mode -1)
  (hide-lines-show-all)
  (org-fold-show-all))

(use-package org-tree-slide
  :after org
  :bind ("C-c p" . org-tree-slide-mode)
  :hook ((org-tree-slide-play . terror/slide-setup)
         (org-tree-slide-stop . terror/slide-end))
  :config
  (setq org-tree-slide-slide-in-effect nil
        org-image-actual-width nil
        org-tree-slide-header t
        org-tree-slide-breadcrumbs " > "
        org-tree-slide-activate-message "Let's begin..."
        org-tree-slide-deactivate-message "The end :)"))

(use-package org-roam
  :ensure t
  :init
  (setq org-roam-v2-ack t)
  :custom
  (org-roam-directory (file-truename "~/org/roam"))
  (org-roam-capture-templates
   '(("a" "Autor" plain
      (file "~/.emacs.d/templates/roam/author.org")
      :target (file+head "%<%Y%m%d%H%M%S>-${slug}.org"
                         "#+title: ${title}\n")
      :unnarrowed t)
     ("c" "Concepto" plain
      (file "~/.emacs.d/templates/roam/concept.org")
      :target (file+head "%<%Y%m%d%H%M%S>-${slug}.org"
                         "#+title: ${title}\n")
      :unnarrowed t)
     ("d" "Por defecto" plain
       "%?"
       :if-new (file+head "%<%Y%m%d%H%M%S>-${slug}.org" "#+title: ${title}\n")
       :unnarrowed t)
     ("q" "Cita" plain
      (file "~/.emacs.d/templates/roam/quote.org")
      :target (file+head "%<%Y%m%d%H%M%S>-${slug}.org"
                         "#+title: ${title}\n")
      :unnarrowed t)))
  :bind (("C-c n l" . org-roam-buffer-toggle)
         ("C-c n f" . org-roam-node-find)
         ("C-c n i" . org-roam-node-insert)
         ("C-c n g" . org-roam-ui-mode)
         ("C-c n c" . org-roam-capture)
         ("C-c n j" . org-roam-dailies-capture-today))
  :config
  (setq org-roam-node-display-template
        (concat "${title:*} " (propertize "${tags:10}" 'face 'org-tag)))
  (org-roam-setup)
  (require 'org-roam-protocol))

(use-package org-roam-ui
  :after org-roam
  :config
  (setq org-roam-ui-sync-theme t
        org-roam-ui-follow t
        org-roam-ui-update-on-save t
        org-roam-ui-open-on-start t))

;;; Happy hacking! ;;;
